package cn.capdi.backend.generator.velocity;

import cn.capdi.backend.generator.api.DbConfig;
import cn.capdi.backend.generator.api.GenPathUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;

import java.io.File;

/**
 * @author eomer
 * @title VelocityGen
 * @date 2023/08/10 17:36
 * @description 代码生成
 */
public class VelocityGen {


    /**
     * @描述 启动
     * @日期 2023/08/18 10:38
     * @作者 eomer
     **/
    public static void main(String[] args) {
        commonCreate();
    }

    /**
     * 代码生成
     *
     * @author eomer
     * @version V1.0.0
     * @date 2023/8/10 22:03
     */
    public static void commonCreate() {

        // ---------  参数配置区域 开始  ---------------
        //  获取项目根目录
        String assembleIcpCodePath = System.getProperty("user.dir");
        // 项目根目录 +  模块名称  （ windows: / 跟 \\ 效果一样 ）
//        String finalProjectPath = assembleIcpCodePath + File.separator + GenPathUtil.MODULE_LINE_ICP;
        String finalProjectPath = assembleIcpCodePath + File.separator;

        //获取数据库配置， 根据需要 DbConfig 按照格式添加自己用到的  数据库配置
        DbConfig dbConfig = DbConfig.getDB(DbConfig.TYPE_ORACLE);
        // 作者
        String author = "田江余";
        // 父包名
//        String packageName = GenPathUtil.PACKAGE_PARENT + "." + GenPathUtil.PACKAGE_LINEICP;
        String packageName = GenPathUtil.PACKAGE_LINEICP;
        // 模块名称
        String moduleName = "workshopPlan";
        // 表名集合， 多表 用逗号隔开 ：   aaa,bbb,ccc
        String tables ="PLAN_LINE_ASSEMBLE_SPLIT";
        // ---------  参数配置区域 结束  ---------------


        // 开始生成代码
        FastAutoGenerator.create(dbConfig.getUrl(), dbConfig.getUsername(), dbConfig.getPassword())
                // 全局配置
                .globalConfig(builder -> {
                    builder.author(author) // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
                            .disableOpenDir() //禁止打开输出目录
                            .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent(packageName) // 设置父包名
                            .moduleName(moduleName); // 设置父包模块名

                })
                // 模板配置
                .templateConfig(builder -> {
                    // 禁用模板
//                    builder.disable(TemplateType.CONTROLLER,TemplateType.SERVICE,TemplateType.SERVICE_IMPL
//                    ,TemplateType.MAPPER,TemplateType.XML);
                })
                //策略：表名
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok()//使用lombok
                            .enableTableFieldAnnotation()//字段注解
                            .idType(IdType.ASSIGN_ID);//主键注解 -
                    builder.controllerBuilder()
                            .enableHyphenStyle()// 开启驼峰
                            .enableRestStyle();//开启RestController
                    builder.addInclude(tables)
                            .addTablePrefix("Te");
                })
                //执行
                .execute();

    }

}
